/*	--- 使用Jackson --- 


前面我们介绍了DOM和SAX两种解析XML的标准接口。

但是，无论是DOM还是SAX，使用起来都不直观。

观察XML文档的结构：

	<?xml version="1.0" encoding="UTF-8" ?>
	<book id="1">
	    <name>Java核心技术</name>
	    <author>Cay S. Horstmann</author>
	    <isbn lang="CN">1234567</isbn>
	    <tags>
	        <tag>Java</tag>
	        <tag>Network</tag>
	    </tags>
	    <pubDate/>
	</book>




我们发现，它完全可以对应到一个定义好的JavaBean中：*/
	
public class Book {
    public long id;
    public String name;
    public String author;
    public String isbn;
    public List<String> tags;
    public String pubDate;
}


/*
如果能直接从【XML文档】解析成【一个JavaBean】，那比DOM或者SAX不知道容易到哪里去了。

幸运的是，一个名叫【Jackson】的开源的第三方库】可以轻松做到【XML -> JavaBean】的转换。

我们要使用【Jackson】，先添加【2个Maven的依赖】：

1.com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1
2.org.codehaus.woodstox:woodstox-core-asl:4.4.1



然后，定义好【JavaBean】，就可以用下面几行代码【解析】：
InputStream -> JacksonXmlModule -> XmlMapper -> Book */
InputStream input = Main.class.getResourceAsStream("/book.xml");

JacksonXmlModule module = new JacksonXmlModule();
XmlMapper mapper = new XmlMapper(module);
Book book = mapper.readValue(input, Book.class);
	// JSON(book) -> Book.class

System.out.println(book.id);
System.out.println(book.name);
System.out.println(book.author);
System.out.println(book.isbn);
System.out.println(book.tags);
System.out.println(book.pubDate);



/*
注意到XmlMapper就是我们需要创建的核心对象，可以用 readValue(InputStream, Class) 直接读取【XML】并返回【一个JavaBean】。

运行上述代码，就可以直接从【Book对象】中拿到数据：

	1
	Java核心技术
	Cay S. Horstmann
	1234567
	[Java, Network]
	null


如果【要解析的数据格式】不是【Jackson内置的标准格式】，那么需要编写一点【额外的扩展】来告诉【Jackson】如何【自定义解析】。


这里我们不做深入讨论，可以参考Jackson的官方文档。



========================================================



#	----- 使用Jackson の 小结 -----

1. 使用Jackson解析XML，可以直接把XML解析为JavaBean，十分方便。


流程:
	InputStream -> JacksonXmlModule -> XmlMapper -> Input_Class

	InputStream input = Main.class.getResourceAsStream("/book.xml");

	JacksonXmlModule module = new JacksonXmlModule();
	XmlMapper mapper = new XmlMapper(module);
	Book book = mapper.readValue(input, Book.class);
		// JSON(book) -> Book.class
	


*/










*/































